package math;

public class Matrice4D  {

	private double a11,a12,a13,a14;
	private double a21,a22,a23,a24;
	private double a31,a32,a33,a34;
	private double a41,a42,a43,a44;
	


	/**
	 * @param a11
	 * @param a12
	 * @param a13
	 * @param a14
	 * @param a21
	 * @param a22
	 * @param a23
	 * @param a24
	 * @param a31
	 * @param a32
	 * @param a33
	 * @param a34
	 * @param a41
	 * @param a42
	 * @param a43
	 * @param a44
	 */
	public Matrice4D(double a11, double a12, double a13, double a14,
					 double a21, double a22, double a23, double a24,
					 double a31, double a32, double a33, double a34,
					 double a41, double a42, double a43, double a44) {
		super();
		this.a11 = a11; this.a12 = a12; this.a13 = a13;	this.a14 = a14;
		this.a21 = a21;	this.a22 = a22;	this.a23 = a23;	this.a24 = a24;
		this.a31 = a31;	this.a32 = a32;	this.a33 = a33;	this.a34 = a34;
		this.a41 = a41;	this.a42 = a42;	this.a43 = a43;	this.a44 = a44;
	}
	
	public Matrice4D(double[][] m){
		
		this.a11 = m[0][0]; this.a12 = m[0][1]; this.a13 = m[0][2];	this.a14 = m[0][3];
		this.a21 = m[1][0];	this.a22 = m[1][1];	this.a23 = m[1][2];	this.a24 = m[1][3];
		this.a31 = m[2][0];	this.a32 = m[2][1];	this.a33 = m[2][2];	this.a34 = m[2][3];
		this.a41 = m[3][0];	this.a42 = m[3][1];	this.a43 = m[3][2];	this.a44 = m[3][3];		
	}
	

	
	public Matrice4D time(Matrice4D m){
		return new Matrice4D(
				a11*m.a11 + a12*m.a21 + a13*m.a31 + a14*m.a41,	 a11*m.a12 + a12*m.a22 +a13*m.a32 + a14*m.a42,	 a11*m.a13 + a12*m.a23 + a13*m.a33 + a14*m.a43, a11*m.a14 + a12*m.a24 + a13*m.a34 + a14*m.a44,
				a21*m.a11 + a22*m.a21 + a23*m.a31 + a24*m.a41,	 a21*m.a12 + a22*m.a22 +a23*m.a32 + a24*m.a42,	 a21*m.a13 + a22*m.a23 + a23*m.a33 + a24*m.a43, a21*m.a14 + a22*m.a24 + a23*m.a34 + a24*m.a44,
				a31*m.a11 + a32*m.a21 + a33*m.a31 + a34*m.a41,	 a31*m.a12 + a32*m.a22 +a33*m.a32 + a34*m.a42,	 a31*m.a13 + a32*m.a23 + a33*m.a33 + a34*m.a43,	a31*m.a14 + a32*m.a24 + a33*m.a33 + a34*m.a44,
				a41*m.a11 + a42*m.a21 + a43*m.a31 + a44*m.a41,	 a41*m.a12 + a42*m.a22 +a43*m.a32 + a44*m.a42,	 a41*m.a13 + a42*m.a23 + a43*m.a33 + a44*m.a43,	a41*m.a14 + a42*m.a24 + a43*m.a33 + a44*m.a44
		);
	}

	public Matrice4D add(Matrice4D m){
		return new Matrice4D(
				a11 + m.a11,	a12 + m.a12,	a13 + m.a13,	 a14 + m.a14 ,
				a21 + m.a21,	a22 + m.a22,	a23 + m.a23,	 a24 + m.a24 ,
				a31 + m.a31,	a32 + m.a32,	a33 + m.a33,	 a34 + m.a34 ,
				a41 + m.a41,	a42 + m.a42,	a43 + m.a43,	 a44 + m.a44 
		);
	}
		
		
	public double trace(){
		return a11+a22+a33+a44;
    }	
	
}





